Introducción

Persistencia de la información

El desarrollo de software ha evolucionado constantemente desde su nacimiento. En este avance se ve involucrada un área muy importante que compone la gran mayoría de los programas informáticos: la persistencia de la información.

Consideramos un programa de ordenador como un conjunto de instrucciones que manejan de forma automática cierta información. Así, se hace necesario un modo de almacenar entradas, salidas o cualquier otro dato importante para la organización, de forma que sobreviva más allá de la ejecución del programa.

Los medios físicos en los que se almacenan estos datos han avanzado enormemente, desde las memorias de ferrita y las tarjetas perforadas hasta los modernos discos duros —con capacidades inimaginables hace sólo diez años— clusterizados en RAID y NAS/SAN, memorias flash o los sistemas de moda en la última temporada primavera-verano, los almacenamientos cloud computing.

Los diseñadores de programas han manejado estos soportes de diferentes modos. Al principio, la escritura de la información en los dispositivos se realizaba de forma "manual", es decir, programada en el mismo software de aplicación. Más tarde, la información se almacenaba en archivos que el sistema operativo manejaba.

A finales de los setenta llegaron las bases de datos, que se desarrollaron y popularizaron sobremanera en la siguiente década. Los sistemas gestores de bases de datos modernos ofrecen acceso concurrente a la información, cierta definición semántica de los datos, fuertes medidas de seguridad y potentes herramientas de explotación de los datos.

Guardando la información en bases de datos, los programas pueden separar fácilmente las funciones de manejo y almacenamiento de la información, consiguiendo una mejor mantenibilidad del software e incluso una mejora sustancial del rendimiento, si la base de datos funciona en un ordenador diferente. Y lo mejor de todo, los programadores no tienen que escribir una y otra vez sistemas específicos para persistir la información, ya que utilizan los lenguajes de consulta (Data Definition Languaje y Data Manipulation Language).

Modelos de persistencia

Con estas herramientas, se han construido algunos patrones útiles como Data Access Object y, en general, la arquitectura de tres capas (persistencia de la información, lógica de negocio y presentación). Estas capas responden perfectamente a uno de los modelos más extendidos hoy en día, el modelo de tres niveles (tiers): cliente, servidor de aplicaciones y servidor de bases de datos, cuyo máximo exponente es la web y sus innumerables aplicaciones.

Pero las exigencias del mercado y la necesidad de confiar en códigos ya maduros y probados, nos urge a buscar soluciones que automaticen aún más la persistencia de la información. Este trabajo es una de tantas propuestas para automatizar la capa de acceso a datos, cuando éstos descansan sobre una BD relacional. Object_Freezer-Relational es una solución para aplicaciones web y sitios programados en PHP orientado a objetos.

La biblioteca se basa en el código de Object_Freezer, originalmente escrito por Sebastian Bergmann. La librería del alemán se divide en dos partes: el "congelador" de objetos propiamente dicho, y un motor de persistencia para el sistema gestor de bases de datos CouchDB. Aprovechando la estructura modular de Object_Freezer, he desarrollado un motor de persistencia para la base de datos relacional MySQL, que a su vez se divide en un modelo de persistencia genérico para bases de datos relacionales y la implementación específica de MySQL.

Software agnóstico

Con la popularización de las bases de datos relacionales y los lenguajes de programación web como PHP o Perl, se ha popularizado una metodología que delega la semántica de la información a la base de datos —los esquemas relacionales son autodescriptivos— dejando que los módulos del programa sean simples puentes entre la interfaz (habitualmente en HTML) y las consultas DML necesarias para almacenar la información (casi siempre SQL).

A este tipo de programas, que no definen la información que manejan y que suelen evitar la programación orientada a objetos, los llamaremos "software agnóstico", ya que la lógica de negocio se produce realiza sin que el programa conozca la información que maneja.